package com.silverbox.shopper.dubboApi.goods;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.silverbox.shopper.entity.*;
import com.silverbox.shopper.entity.extend.*;
import com.silverbox.shopper.entity.extend.GoodsGroup;
import org.apache.ibatis.annotations.Param;

import com.silverbox.sweeporder.controller.index.vo.GoodsVO;

/**
 * 店铺商品相关接口（目前提供给扫码下单使用）
 * 
 * @author YTGHTGHS
 * @date 2017年12月19日
 * @description
 */
public interface ShopperGoodsServiceApi {

	/**
	 * 查询本周热销商品（扫码下单）
	 * 
	 * @param
	 * @param storeId
	 * @return
	 */
	List<HotGoodsWeek> getOldHotGoodsWeek(Integer storeId, String todayStart, String todayEnd);

	/**
	 * 查询今日特惠商品（扫码下单）
	 * 
	 * @param shopId
	 * @return
	 */
	List<DiscountInfo> getDiscountGoods(String shopId, Integer goodsId, String nowDate, Integer dayTime);

    /**
     * 店铺是否有 有效菜谱
     * @param shopperId
     * @param storeId
     * @return
     */
	int isEffectGoodsGroup(Integer shopperId,Integer storeId);

    /**
     * 子账号下 扫码点餐类型有效菜谱
     * @param storeId
     * @param shopperId
     * @return
     */
    List<GoodsGroup> getEffsctGroupByStoreId( Integer storeId,Integer shopperId);

    /**
     * 子账号下 全部类型的有效菜谱
     * @param storeId
     * @param shopperId
     * @return
     */
    List<GoodsGroup> getDefaultGroupByStoreId( Integer storeId,Integer shopperId);

    /**
     * 子账号 默认类型菜谱
     * @param storeId
     * @param shopperId
     * @return
     */
    List<GoodsGroup> getDefaultGroup(Integer storeId,Integer shopperId);

    /**
     * 子店铺下  菜谱详情
     * @return
     */
	List<CategoryGoods> getEffsctGoodsGroupByStoreId(GoodsGroupParam goodsGroupParam);

    /**
     * 主账号 扫码点餐类型有效菜谱
     * @param shopperId
     * @return
     */
    List<GoodsGroup> getEffsctGroupByShopperId(Integer storeId,Integer shopperId);

    /**
     * 主账号下 全部类型的有效菜谱
     * @param shopperId
     * @return
     */
    List<GoodsGroup> getDefaultEffsctGroupByShopperId(Integer storeId,Integer shopperId );
    /**
     * 主账号下  扫码点餐类型有效菜谱
     * @return
     */
    List<CategoryGoods> getEffsctGoodsGroupByShopperId(GoodsGroupParam goodsGroupParam);

    /**
     * 分类获取商品信息（只显示默认规格）
     * @param param
     * @return
     */
    /*List<CategoryGoods> getGoodsDefaultSize(GoodsExtendParam param);*/

	/**
	 * 分类获取商品信息（扫码下单）
	 * 
	 * @param param
	 * @return
	 */
	List<CategoryGoods> getCategoryGoods(GoodsExtendParam param);

	/**
	 * 获取菜品绑定的属性
	 * 
	 * @param goodsId
	 * @param storeId
	 * @param shopperId
	 * @return
	 */
	List<GoodsPropsExtend> getGoodsBindPropsList(Integer goodsId, Integer shopperId, Integer storeId);

	/**
	 * 获取店铺绑定的属性
	 * 
	 * @param
	 * @param shopperId
	 * @param storeId
	 * @return
	 */
	List<GoodsPropsExtend> getShopBindPropsList(Integer shopperId, Integer storeId);

	/**
	 * 获取所有普通套餐
	 * 
	 * @param
	 * @return
	 */
	List<NormalPackage> getNormalPackageList(Integer shopperId);

	/**
	 * 获取单个普通套餐
	 * 
	 * @param shopperId
	 * @param packageId
	 * @return
	 */
	List<NormalPackage> getNormalPackage(Integer shopperId, Integer storeId, Integer packageId);

	/**
	 * 获取所有组合套餐
	 * 
	 * @param shopperId
	 * @param storeId
	 * @return
	 */
	List<CombinationPackage> getCombinationPackageList(Integer shopperId, Integer storeId);

	/**
	 * 获取单个组合套餐
	 * 
	 * @param shopperId
	 * @param storeId
	 * @param startDate
	 * @param endDate
	 * @param nowDate
	 * @return
	 */
	List<CombinationPackage> getCombinationPackage(Integer shopperId, Integer storeId, String startDate, String endDate,
			String nowDate, Integer packageId);

	/**
	 * 获取店铺所有绑定菜品的属性
	 * 
	 * @param
	 * @param shopperId
	 * @param storeId
	 * @return
	 */
	List<GoodsPropsExtend> getAllGoodsBindPropsList(Integer shopperId, Integer storeId);

	/**
	 * 获取分时段商品
	 * 
	 * @param storeId
	 * @param nowDate
	 * @param
	 * @return
	 */
	List<DaypartingGoods> getDaypartingGoods(Integer storeId, Integer weekNum, String nowDate);

	/**
	 * 根据店铺storeId和goodsId查询是否售罄
	 * 
	 * @param storeId
	 * @param goodsId
	 * @param startDate
	 * @param endDate
	 * @param nowDate
	 * @return
	 */
    List<Map<String,Object>> isSelloutByGoodsId(Integer storeId, List<Integer> goodsId, String startDate, String endDate,
			String nowDate);

	/**
	 * 根据菜品名称搜索菜品
	 * 
	 * @param param
	 * @return
	 */
	List<CategoryGoods> searchGoodsByGoodsName(GoodsExtendParam param);

    /**
     * 查询商品详情（默认规格）
     * @param storeId
     * @param goodsId
     * @return
     */
    List<CategoryGoodsDetail> getGoodsDetail(Integer storeId, Integer goodsId );

	/**
	 * 根据商品Id集合查询商品size集合默认取第一个
	 * 
	 * @param goodsIds
	 * @return void
	 * @author litao
	 * @date 2018年1月30日
	 */
	List<Size> getSizeInfoByGoodsId(List<Integer> goodsIds);

	/**
	 * 更新本周最火
	 * 
	 * @param storeId
	 * @param nowDate
	 * @param weekDate
	 */
	void updateHotByCallAble(Integer storeId, Integer shopperPid, String nowDate, String weekDate);

	/**
	 * 获取本周最火商品
	 * 
	 * @param storeId
	 * @param isHand
	 * @param maxNum
	 * @return
	 */
	List<HotGoodsWeek> getHotWeekGoods(Integer storeId, Integer isHand, Integer maxNum);

	/**
	 * 获取系统及商品信息
	 * 
	 * @param systemGoods
	 * @return
	 */
	List<CategoryGoods> getSystemGoodsInfo(List<String> systemGoods);
	
	/**
	 * 获取必点菜商品信息
	 */
	List<CategoryGoods> getNeedGoodsInfoList(GoodsExtendParam goodsExtendParam);
	
	/**
	 * 获取绑定的商品码的菜品信息
	 * @param
	 * @return
	 */
	Qrcode getQrcodeGoodsInfo(Integer storeId, Integer goodsId, Long sizeId);

	/**
	 * 根据店铺id/商品id/sizeId获取商品信息
	 * @param
	 */
	List<CategoryGoods> getGoodsInfoByGoodsId(GoodsExtendParam goodsExtendParam);
	
	/**
	 * 获取店铺必选分类
	 * @param storeId
	 * @param shopperId
	 */
	List<RequiredCategory> getRequiredCategory(Integer storeId, Integer shopperId, String tableUid);
	
	/**
	 * 获取店铺系统级商品配置信息
	 * @param storeId
	 * @param shopperId
	 */
	List<SystemGoodsExtend> getShopSystemGoods(Integer storeId, Integer shopperId, String tableUid,int weekNum);
	/**
	 * 获取单个商品加价做法信息
	 * @param goodsId
	 * @param shopperId
	 * @return
	 */
	List<GoodsPropsExtend> getGoodsCookingsList(Integer goodsId, Integer shopperId);
	
	/**
	 * 获取店铺所有商品加价做法信息
	 * @param shopperId
	 * @return
	 */
	List<GoodsPropsExtend> getAllGoodsCookingsList(Integer shopperId);
	
	
	/**
	 * 获取店铺的推荐菜
	 * @param shopperId
	 * @param storeId
	 * @return
	 */
	List<RecommendGoods> getRecommendGoods(Integer shopperId, Integer storeId);
	
	/**
	 * 根据cookId获取菜谱
	 * @param valueOf
	 * @return
	 */
	List<GroupGoodsExtend> getGroupGoodsList(Integer cookId);	

}
